package br.edu.unipampa.narrativa;

import br.edu.unipampa.cenario.Cenario;
import br.edu.unipampa.cenario.Lugar;
import br.edu.unipampa.desafios.Desafios;
import br.edu.unipampa.personagem.Mensageiro;
import br.edu.unipampa.personagem.Personagem;
import br.edu.unipampa.recurso.Arma;
import br.edu.unipampa.recurso.Equipamento;
import java.util.Scanner;

/**
 *
 * @author Daniele Martins
 */
public class Narrativa {

    private Scanner teclado;
    private Cenario c;
    private Mensageiro mensageiro;
    private Personagem amigo;
    private Interface texto;
    private Lugar inicio;
    private Lugar d;
    private Equipamento cantil;
    private Equipamento canoa;
    private Desafios deserto;
    private Desafios atravessarRio;
    private Desafios batalha;

    public Narrativa() {
        //deserto= new Desafios("Charco","Desafio do deserto", cantil, 10);

        amigo = new Personagem(null, "Encha o cantil", 10, 1);
        mensageiro = new Mensageiro("mensageiro", null, 20, 5);
        c = new Cenario();
        inicio = c.getLocal(0);
        texto = new Interface();
        //  mensageiro.setLugar(inicio);// onde personagem esta
        // mensageiro.setLugar(inicio.getSaida(1));// para onde personagem vai

    }

    public static void main(String args[]) {
        Narrativa n = new Narrativa();
        n.charco();


    }

    public void inicio() { //cenario 0
        getTexto().inicio();
        getTexto().mostraVida(getMensageiro().getVida());
        fimJogo(mensageiro); // verifica se mensageiro tem vida suficiente para seguir o jogo e retona mensagem
        getMensageiro().encherCantil();

        getTexto().lutaInimigo();
        if (getTexto().getComando() == 1) {
            System.out.println("+++LUTA++\n");
            //implementar
        } else {
            getTexto().desistiu();
        }


        fimJogo(mensageiro);
        getTexto().mostraVida(getMensageiro().getVida());

        escolhaMensageiro();
        getTexto().escolheCenario(); // metodo que pergunta o que o mensageiro deseja fazer
        if ((getTexto().getComando() == 1) || (getTexto().getComando() == 2)) {
            precipicio();
        } else if (getTexto().getComando() == 3) {
            //       mensageiro.setLugar(inicio.getSaida(1));  // saida 1 = deserto
            mensageiro.andar(c, 1);
            //   deserto();
        } else {
            mensageiro.andar(c, 3);
            //     mensageiro.setLugar(inicio.getSaida(3));  // saida 3 = cenario 3
            //ponte();


        }

    }

    public void deserto() { // deserto é o cenario 1
        //   mensageiro.setLugar(inicio.getSaida(1));
        getTexto().deserto(); // historia do deserto       
        fimJogo(mensageiro); // verifica se mensageiro tem vida suficiente para seguir o jogo e retona mensagem
        getTexto().mostraVida(getMensageiro().getVida());

        getTexto().encherCantil();
        if (getTexto().getComando() == 1) {
            mensageiro.encherCantil();
        }


        getTexto().amigo();
        if (getTexto().getComando() == 1) {
            getTexto().amigoDeserto();
            getTexto().desejaBeber();


        } else {
            getTexto().desejaBeber();
            if (getTexto().getComando() == 1) {
                getTexto().mostraBeber(getMensageiro().beber());
                fimJogo(mensageiro);
            } else {
                fimJogo(mensageiro);
            }
        }


        fimJogo(mensageiro);
        getTexto().mostraVida(getMensageiro().getVida());
        escolhaDeserto();

        getTexto().escolheCenario(); // metodo que pergunta o que o mensageiro deseja fazer
        if (getTexto().getComando() == 1) {
            mensageiro.andar(c, 1);
            //  mensageiro.setLugar(inicio.getSaida(0)); // mensageiro volta para o inicio
            //    inicio();
        } else if (getTexto().getComando() == 2) {
            precipicio();
        } else if (getTexto().getComando() == 3) {
            mensageiro.andar(c, 2);
            //    mensageiro.setLugar(inicio.getSaida(2));
            //  estrada();
        } else {
            mensageiro.andar(c, 4);
            //    mensageiro.setLugar(inicio.getSaida(4));
            //   cidade();
        }
    }

    public void estrada() {
//cenario 2
        getTexto().estrada();
        getTexto().mostraVida(getMensageiro().getVida());
        fimJogo(mensageiro); // verifica se mensageiro tem vida suficiente para seguir o jogo e retona mensagem

        getTexto().lutaInimigo();
        if (getTexto().getComando() == 1) {

            getTexto().amigo();
            if (getTexto().getComando() == 1) {
                System.out.println("++ Amigo ++");
            } else {
                System.out.println("++Não conversou++\n");
            }

            getTexto().mostraVida(getMensageiro().getVida());
            fimJogo(mensageiro);

            escolhaMensageiro();
            getTexto().escolheCenario(); // metodo que pergunta o que o mensageiro deseja fazer
            if (getTexto().getComando() == 1) {
                mensageiro.andar(c, 1); // mensageiro volta para deserto
                deserto();
            } else if (getTexto().getComando() == 2) {
                precipicio();
            } else if (getTexto().getComando() == 3) {
                precipicio();
            } else {
                mensageiro.andar(c, 5);
                //    mensageiro.setLugar(inicio.getSaida(5)); // cenario 5
                // charco();
            }
        }
    }

    public void ponte() {

        //canario 3

        getTexto().ponte();
        getTexto().mostraVida(getMensageiro().getVida());
        fimJogo(mensageiro); // verifica se mensageiro tem vida suficiente para seguir o jogo e retona mensagem

        getTexto().amigo();
        if (getTexto().getComando() == 1) {
            getTexto().amigoPonte();
            getTexto().pegarCorda();
            if (getTexto().getComando() == 1) {
                //add recurso galocha
                System.out.println("add recurso");

                fimJogo(mensageiro);
            }
//            getTexto().pegarGalocha();
//            if (getTexto().getComando() ==1) 
//                 //add recurso galocha
//                System.out.println("add recurso");

        } else {
            getTexto().pegarCorda();
            if (getTexto().getComando() == 1) {
                //add recurso galocha
                System.out.println("add recurso");

                fimJogo(mensageiro);
            }

        }

        getTexto().mostraVida(getMensageiro().getVida());
        fimJogo(mensageiro);

        escolhaMensageiro();
        getTexto().escolheCenario(); // metodo que pergunta o que o mensageiro deseja fazer
        if (getTexto().getComando() == 1) {
            //     mensageiro.setLugar(inicio.getSaida(1)); // mensageiro volta para deserto
            precipicio();
        } else if (getTexto().getComando() == 2) {
            mensageiro.andar(c, 0);
            //  inicio();
        } else if (getTexto().getComando() == 3) {
            mensageiro.andar(c, 4);
            // cidade();
        } else {
            //    mensageiro.setLugar(inicio.getSaida(6)); // cenario 5
            mensageiro.andar(c, 6);
            //  charcoNorte();
        }
    }

    public void cidade() {
        // cenario 4
        getTexto().cidade();


        if (getTexto().getComando() == 1) {
            System.out.println("+++LUTA++\n");
            //implementar
        } else {
            getTexto().desistiu();
        }

        getTexto().entregarCarta();

    }

    public void charco() { //cenario 5
        
        
         getTexto().lutaInimigo();
        if (getTexto().getComando() == 1) {
            System.out.println("+++LUTA++\n");
            //implementar
        } else {
            getTexto().desistiu();
        }
        
        getTexto().escolhaCharco();
        if (getTexto().getComando() == 1) {
                charcoNorte();
            } else if (getTexto().getComando() == 1) {
                charcoSul();
            }else 

//        getTexto().amigo();
//        if (getTexto().getComando() == 1) {
//            getTexto().escolhaCharco(); // charco norte ou sul
//            if (getTexto().getComando() == 1) {
//                charcoNorte();
//            } else {
//                charcoSul();
//            }
//            System.out.println("++ Amigo ++");
//        } else {
//            System.out.println("++Não conversou++\n");
//        }



        escolhaMensageiro();
        getTexto().escolheCenario(); // metodo que pergunta o que o mensageiro deseja fazer
        if (getTexto().getComando() == 1) {
            mensageiro.andar(c, 4);
            //     mensageiro.setLugar(inicio.getSaida(1)); // mensageiro volta para deserto
            // cidade();
        } else if (getTexto().getComando() == 2) {
            mensageiro.andar(c, 2);
            //  estrada();
        } else if (getTexto().getComando() == 3) {
            precipicio();
        } else {
            //    mensageiro.setLugar(inicio.getSaida(5)); // cenario 5
            mensageiro.andar(c, 8);
            //arroio();
        }
    }

    public void charcoNorte() {

        //cenario 6
        getTexto().charcoNorte();
        getTexto().mostraVida(getMensageiro().getVida());
        fimJogo(mensageiro); // verifica se mensageiro tem vida suficiente para seguir o jogo e retona mensagem

        getTexto().lutaInimigo();
        if (getTexto().getComando() == 1) {
            System.out.println("+++LUTA++\n");
            // chama  o desafio luta
            //verificar quem ganhou e chamar print
        } else {
            getTexto().desistiu();
        }


        fimJogo(mensageiro);
        getTexto().mostraVida(getMensageiro().getVida());


        escolhaMensageiro();
        getTexto().escolheCenario(); // metodo que pergunta o que o mensageiro deseja fazer
        if (getTexto().getComando() == 1) {
            //     mensageiro.setLugar(inicio.getSaida(1)); // mensageiro volta para deserto
            precipicio();
        } else if (getTexto().getComando() == 2) {
            mensageiro.andar(c, 3);
            //  estrada();
        } else if (getTexto().getComando() == 3) {
            mensageiro.andar(c, 7);
            // charcoSul();
        } else {
            //    mensageiro.setLugar(inicio.getSaida(5)); // cenario 5
            precipicio();
        }
    }

    public void charcoSul() { // cenario 7

        getTexto().charcoSul(); // historia do charcoSul
        //  mensageiro.andar();       // toda vez que mensageiro anda, perde 10 de vida
        getTexto().mostraVida(getMensageiro().getVida()); // apos mensageiro andar, vai mostra o quanto de vida ele possui
        fimJogo(mensageiro); // verifica se tem quantidade vida necessario para continuar o jogo


        getTexto().amigo();
        if (getTexto().getComando() == 1) {
            System.out.println("++ Amigo ++");
        } else {
            System.out.println("++Não conversou++\n");
        }

        getTexto().mostraVida(getMensageiro().getVida());
        fimJogo(mensageiro);



        escolhaMensageiro();
        getTexto().escolheCenario(); // metodo que pergunta o que o mensageiro deseja fazer
        if (getTexto().getComando() == 1) {
            //     mensageiro.setLugar(inicio.getSaida(1)); // mensageiro volta para deserto
            mensageiro.andar(c, 6);
            //  charcoNorte();
        } else if (getTexto().getComando() == 2) {
            mensageiro.andar(c, 4);// cidade();
        } else if (getTexto().getComando() == 3) {
            mensageiro.andar(c, 8);
            // arroio();
        } else {
            //    mensageiro.setLugar(inicio.getSaida(5)); // cenario 5
            precipicio();
        }

    }

    public void arroio() {

        //cenario 8
        getTexto().arroio();
        getTexto().mostraVida(getMensageiro().getVida());
        fimJogo(mensageiro); // verifica se mensageiro tem vida suficiente para seguir o jogo e retona mensagem

        escolhaMensageiro();
        getTexto().escolheCenario(); // metodo que pergunta o que o mensageiro deseja fazer
        if (getTexto().getComando() == 1) {
            //     mensageiro.setLugar(inicio.getSaida(1)); // mensageiro volta para deserto
            mensageiro.andar(c, 7);
            // charcoSul();
        } else if (getTexto().getComando() == 2) {
            mensageiro.andar(c, 5);
            // charco();
        } else if (getTexto().getComando() == 3) {
            precipicio();
        } else {
            //    mensageiro.setLugar(inicio.getSaida(5)); // cenario 5
            precipicio();
        }
    }

    public void precipicio() {
        System.out.println("++Precipicio++");
        System.out.println("O mensageiro chegou ao precipicio e morreu :(");
        System.exit(0);
    }

    public void escolhaDeserto() {

        getTexto().oQueDesejaFazer();
        if (getTexto().getComando() == 1) {
            getTexto().comeu();
            getMensageiro().comer();
        } else if (getTexto().getComando() == 2) {
            getMensageiro().dormir();
            getTexto().dormiu();
        } else if (getTexto().getComando() == 3) {
            getTexto().mostraBeber(getMensageiro().beber());
        } else {
            //   getTexto().escolheCenario();
        }
        getTexto().mostraVida(getMensageiro().getVida());
        fimJogo(mensageiro);
    }

    public void escolhaMensageiro() {
        getMensageiro().encherCantil();
        getTexto().oQueDesejaFazer();
        if (getTexto().getComando() == 1) {
            getTexto().comeu();
            getMensageiro().comer();
        } else if (getTexto().getComando() == 2) {
            getMensageiro().dormir();
            getTexto().dormiu();
        } else if (getTexto().getComando() == 3) {

            getTexto().mostraBeber(getMensageiro().beber());
        } else {
            //   getTexto().escolheCenario();
        }
        getTexto().mostraVida(getMensageiro().getVida());
        fimJogo(mensageiro);
    }

    public Mensageiro getMensageiro() {
        return mensageiro;
    }

    public void setMensageiro(Mensageiro mensageiro) {
        this.mensageiro = mensageiro;
    }

    public Scanner getTeclado() {
        return teclado;
    }

    public void setTeclado(Scanner teclado) {
        this.teclado = teclado;
    }

    public Cenario getC() {
        return c;
    }

    public void setC(Cenario c) {
        this.c = c;
    }

    public Interface getTexto() {
        return texto;
    }

    public void setTexto(Interface texto) {
        this.texto = texto;


    }

    private boolean fimJogo(Mensageiro m) {
        if (m.isStatus() == false) {
            getTexto().FimJogo();
            System.exit(0);
        }
        return false;

    }
}
